package com.itcast.springboot.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.itcast.springboot.bean.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;


@RestController
@CrossOrigin
public class WebsocketController {
    @Autowired
    private SimpMessagingTemplate template;

    /**
     * 原生Broker
     */
//    //发布到sendToAll主题上
//    @MessageMapping("/sendToAll")
//    public String sendToAll(String msg) {
//        return msg;
//    }
//
//    //发布到topic主题上
//    @MessageMapping("/send")
//    @SendTo("/topic")
//    public String say(String msg) {
//        return msg;
//    }

    //群发：发布到topic主题上
    @GetMapping("/sendToAllByTemplate")
    @MessageMapping("/sendToAllByTemplate")
    public void sendToAllByTemplate(Map<String, String> params) {
        String sendUserId = params.get("sendUserId");
        String msg = params.get("msg");
        String receUserId = "所有人";
        Map<String, String> map = new HashMap<>();
        map.put("msg", msg);
        map.put("sendUserId", sendUserId);
        map.put("receUserId", receUserId);
        //将map封装成JSON字符串
        String JsonMap = JSON.toJSONString(map);
        template.convertAndSend("/topic/all", JsonMap);
    }

//    //单发：发布到queue主题上
//    @GetMapping("/sendToUserTemplate")
//    @MessageMapping("/sendToUserTemplate")
//    public void sendToUserTemplate(Map<String, String> params) {
//        String sendUserId = params.get("sendUserId");
//        String receUserId = params.get("receUserId");
//        String msg = params.get("msg");
//        Map<String, String> map = new HashMap<>();
//        map.put("msg", msg);
//        map.put("sendUserId", sendUserId);
//        map.put("receUserId", receUserId);
//        //将map封装成JSON字符串
//        String JsonMap = JSON.toJSONString(map);
//        template.convertAndSendToUser(receUserId, "/queue", JsonMap);
//    }

    //单发：发布到queue主题上
    @GetMapping("/sendToUserTemplate")
    @MessageMapping("/sendToUserTemplate")
    public void sendToUserTemplate(@RequestBody Message message) {
        String sendUserId = message.getSendUserId();
        String receUserId = message.getReceUserId();
        String msg = message.getMConn();
        Map<String, String> map = new HashMap<>();
        map.put("msg", msg);
        map.put("sendUserId", sendUserId);
        map.put("receUserId", receUserId);
        //将map封装成JSON字符串
        String JsonMap = JSON.toJSONString(map);
        template.convertAndSendToUser(receUserId, "/queue", JsonMap);
    }


//    @GetMapping("/send")
//    public String msgReply(@RequestParam String msg) {
//        template.convertAndSend("/topic", msg);
//        return msg;
//    }


//    /**
//     * RabbitMq
//     */
//    //  /exchange/<ExchangeName>
//    @GetMapping("/sendToUserExchange")
//    @MessageMapping("/sendToUserExchange")
//    public void sendToUserExchange(Map<String, String> params) {
//        String fromUserId = params.get("fromUserId");
//        String toUserId = params.get("toUserId");
//        String msg = fromUserId + "发送给" + toUserId + "的消息： " + params.get("msg");
//        String destination = "/exchange/sendToUser/user" + toUserId;
//        template.convertAndSend(destination, msg);
//    }
//    //  /queue/<queue>
//    @GetMapping("/sendToUserQueue")
//    @MessageMapping("/sendToUserQueue")
//    public void sendToUserQueue(Map<String, String> params) {
//        String fromUserId = params.get("fromUserId");
//        String toUserId = params.get("toUserId");
//        String msg = fromUserId + "发送给" + toUserId + "的消息： " + params.get("msg");
//        String destination = "/queue/user" + toUserId;
//        template.convertAndSend(destination, msg);
//    }
//
//    //  /topic/<topicName>
//    @GetMapping("/sendToUserTopic")
//    @MessageMapping("/sendToUserTopic")
//    public void sendToUserTopic(Map<String, String> params) {
//        String fromUserId = params.get("fromUserId");
//        String toUserId = params.get("toUserId");
//        String msg = fromUserId + "发送给" + toUserId + "的消息： " + params.get("msg");
//        String destination = "/topic/user" + toUserId;
//        template.convertAndSend(destination, msg);
//    }
//
//    //  /topic/<topicName>
//    @GetMapping("/sendToAllTopic")
//    @MessageMapping("/sendToAllTopic")
//    public void sendToAllTopic(String msg) {
//        //群发将后面参数改为chat
//        String destination = "/topic/chat";
//        template.convertAndSend(destination, msg);
//    }

}
